﻿package com.amcharts.axes
{
    import com.amcharts.*;
    import com.amcharts.chartClasses.*;
    import com.amcharts.events.*;
    import com.amcharts.utils.*;
    import flash.events.*;
    import mx.collections.*;
    import mx.core.*;
    import mx.formatters.*;

    public class CategoryAxis extends AxisBase
    {
        protected var _cellWidth:Number;
        protected var _wrapLabels:Boolean = false;
        protected var _timeDifference:Number;
        protected var _dateFormats:Object;
        protected var _dateFormatsArray:Array;
        protected var _periods:Array;
        protected var _autoTruncate:Boolean;
        protected var _endTime:Number;
        protected var _parseDates:Boolean;
        protected var _nextPeriod:Object;
        protected var _minPeriod:String = "DD";
        protected var _equalSpacing:Boolean;
        protected var _startTime:Number;
        protected var _stepWidth:Number;
        protected var _chart:AmSerialChart;
        protected var _startOnAxis:Boolean = false;
        protected var _gridPosition:String = "middle";
        protected var _firstDayOfWeek:Number = 1;
        static const VERSION:String = "1.8.3.1";

        public function CategoryAxis() : void
        {
            _periods = [{period:"ss", count:1}, {period:"ss", count:5}, {period:"ss", count:10}, {period:"ss", count:30}, {period:"mm", count:1}, {period:"mm", count:5}, {period:"mm", count:10}, {period:"mm", count:30}, {period:"hh", count:1}, {period:"hh", count:6}, {period:"hh", count:12}, {period:"DD", count:1}, {period:"WW", count:1}, {period:"MM", count:1}, {period:"MM", count:2}, {period:"MM", count:3}, {period:"MM", count:6}, {period:"YYYY", count:1}, {period:"YYYY", count:2}, {period:"YYYY", count:5}, {period:"YYYY", count:10}, {period:"YYYY", count:50}, {period:"YYYY", count:100}];
            _orientation = "horizontal";
            _position = "bottom";
            _dataProvider = new ArrayCollection();
            _dateFormats = new Object();
            _dateFormats["fff"] = "JJ:NN:SS";
            _dateFormats["ss"] = "JJ:NN:SS";
            _dateFormats["mm"] = "JJ:NN";
            _dateFormats["hh"] = "JJ:NN";
            _dateFormats["DD"] = "MMM DD";
            _dateFormats["WW"] = "MMM DD";
            _dateFormats["MM"] = "MMM";
            _dateFormats["YYYY"] = "YYYY";
            generateDFArray();
            _nextPeriod = new Object();
            _nextPeriod["fff"] = "ss";
            _nextPeriod["ss"] = "mm";
            _nextPeriod["mm"] = "hh";
            _nextPeriod["hh"] = "DD";
            _nextPeriod["DD"] = "MM";
            _nextPeriod["MM"] = "YYYY";
            return;
        }// end function

        public function set autoTruncate(param1:Boolean) : void
        {
            _autoTruncate = param1;
            return;
        }// end function

        public function get cellWidth() : Number
        {
            return _cellWidth;
        }// end function

       public function get minDuration() : Number
        {
            var _loc_1:* = Dates.extractPeriod(_minPeriod);
            return Dates.getPeriodDuration(_loc_1.period, _loc_1.count);
        }// end function

        public function get gridPosition() : String
        {
            return _gridPosition;
        }// end function

        public function get parseDates() : Boolean
        {
            return _parseDates;
        }// end function

        public function get startOnAxis() : Boolean
        {
            return _startOnAxis;
        }// end function

        public function set dateFormats(param1:Array) : void
        {
            var _loc_2:Number = NaN;
            _dateFormatsArray = param1;
            if (param1)
            {
                _loc_2 = 0;
                while (_loc_2 < param1.length)
                {
                    
                    _dateFormats[param1[_loc_2].period] = param1[_loc_2].format;
                    _loc_2 = _loc_2 + 1;
                }
            }
            invalidateDisplayList();
            return;
        }// end function

        public function getStepWidth(param1:Number) : Number
        {
            var _loc_2:Number = NaN;
            if (_startOnAxis)
            {
                _loc_2 = _axisWidth / (param1 - 1);
            }
            else
            {
                _loc_2 = _axisWidth / param1;
            }
            return _loc_2;
        }// end function

        public function set gridPosition(param1:String) : void
        {
            _gridPosition = param1;
            return;
        }// end function

        public function set parseDates(param1:Boolean) : void
        {
            _parseDates = param1;
            if (_parseDates)
            {
                setStyle("startOnAxis", true);
            }
            invalidateChart();
            return;
        }// end function

        public function set firstDayOfWeek(param1:Number) : void
        {
            _firstDayOfWeek = param1;
            return;
        }// end function

        protected function handleGuideOver(event:MouseEvent) : void
        {
            var _loc_2:* = event.target.index;
            var _loc_3:* = _guides[_loc_2];
            _chart.balloon.follow = true;
            _chart.balloon.changeColor(_loc_3.balloonColor);
            _chart.balloon.show(_loc_3.balloonText);
            return;
        }// end function

        public function dateToCoordinate(param1:Date) : Number
        {
            var _loc_2:Number = NaN;
            if (_parseDates)
            {
            }
            if (!_equalSpacing)
            {
                return (param1.getTime() - _startTime) * _stepWidth;
            }
            if (_parseDates)
            {
            }
            if (_equalSpacing)
            {
                _loc_2 = Utils.getClosestIndex(_dataProvider, "time", param1.getTime(), false, 0, (_dataProvider.length - 1));
                return getCoordinate(_loc_2 - _start);
            }
            return NaN;
        }// end function

        public function get autoTruncate() : Boolean
        {
            return _autoTruncate;
        }// end function

        protected function choosePeriod(param1:uint) : Object
        {
            var _loc_2:* = Dates.getPeriodDuration(_periods[param1].period, _periods[param1].count);
            var _loc_3:* = Math.ceil(_timeDifference / _loc_2);
            if (_loc_3 <= _gridCount)
            {
                return _periods[param1];
            }
            if ((param1 + 1) < _periods.length)
            {
                return choosePeriod((param1 + 1));
            }
            return _periods[param1];
        }// end function

        public function getDateFormat(param1:String) : String
        {
            return _dateFormats[param1];
        }// end function

        public function set chart(param1:AmSerialChart) : void
        {
            _chart = param1;
            return;
        }// end function

        public function set rotate(param1:Boolean) : void
        {
            if (param1)
            {
                _orientation = "vertical";
            }
            else
            {
                _orientation = "horizontal";
            }
            fixPosition();
            _rotate = param1;
            return;
        }// end function

        public function timeZoom(param1:Number, param2:Number) : void
        {
            _startTime = param1;
            _endTime = param2 + minDuration;
            _dataChanged = true;
            invalidateDisplayList();
            return;
        }// end function

        public function get minPeriod() : String
        {
            return _minPeriod;
        }// end function

        public function set startOnAxis(param1:Boolean) : void
        {
            _startOnAxis = param1;
            if (_chart)
            {
                _chart.invalidateDisplayList();
            }
            return;
        }// end function

        public function formatDate(param1:Date) : String
        {
            var _loc_2:* = new DateFormatter();
            var _loc_3:* = _dateFormats[_minPeriod];
            _loc_2.formatString = _loc_3;
            return _loc_2.format(param1);
        }// end function

        public function setDateFormat(param1:String, param2:String) : void
        {
            _dateFormats[param1] = param2;
            invalidateDisplayList();
            return;
        }// end function

        public function set wrapLabels(param1:Boolean) : void
        {
            _wrapLabels = param1;
            return;
        }// end function

        public function get dateFormats() : Array
        {
            return _dateFormatsArray;
        }// end function

        public function get firstDayOfWeek() : Number
        {
            return _firstDayOfWeek;
        }// end function

        public function get stepWidth() : Number
        {
            return _stepWidth;
        }// end function

        public function get chart() : AmSerialChart
        {
            return _chart;
        }// end function

        public function coordinateToDate(param1:Number) : Date
        {
            var _loc_2:Number = NaN;
            if (equalSpacing)
            {
                _loc_2 = xToIndex(param1);
                return new Date(SerialDataItem(_dataProvider.getItemAt(_loc_2)).time);
            }
            return new Date(_startTime + param1 / _stepWidth);
        }// end function

        public function set equalSpacing(param1:Boolean) : void
        {
            _equalSpacing = param1;
            invalidateChart();
            return;
        }// end function

        protected function generateDFArray() : void
        {
            var _loc_1:String = null;
            _dateFormatsArray = new Array();
            for (_loc_1 in _dateFormats)
            {
                
                _dateFormatsArray.push({period:_loc_1, format:_dateFormats[_loc_1]});
            }
            return;
        }// end function

        protected function invalidateChart() : void
        {
            if (_chart)
            {
                _chart.dataChanged = true;
                _chart.resetZoom();
                _chart.invalidateProperties();
            }
            return;
        }// end function

        public function set minPeriod(param1:String) : void
        {
            _minPeriod = param1;
            invalidateChart();
            return;
        }// end function

        public function get equalSpacing() : Boolean
        {
            return _equalSpacing;
        }// end function

        public function get wrapLabels() : Boolean
        {
            return _wrapLabels;
        }// end function

        public function categoryToCoordinate(param1:String) : Number
        {
            var _loc_2:Number = NaN;
            if (_chart)
            {
                if (!_stepWidth)
                {
                    validateNow();
                }
                _loc_2 = _chart.getCategoryIndexByValue(param1);
                return getCoordinate(_loc_2 - _start);
            }
            else
            {
                return NaN;
            }
        }// end function

        public function getCoordinate(param1:Number) : Number
        {
            var _loc_2:* = param1 * _stepWidth;
            if (!_startOnAxis)
            {
                _loc_2 = _loc_2 + _stepWidth / 2;
            }
            return _loc_2;
        }// end function

        override protected function updateDisplayList(param1:Number, param2:Number) : void
        {
            var _loc_4:Number = NaN;
            var _loc_5:Number = NaN;
            var _loc_6:Number = NaN;
            var _loc_7:uint = 0;
            var _loc_8:Boolean = false;
            var _loc_9:Boolean = false;
            var _loc_10:Number = NaN;
            var _loc_11:String = null;
            var _loc_12:Object = null;
            var _loc_13:Number = NaN;
            var _loc_14:Object = null;
            var _loc_15:Number = NaN;
            var _loc_16:String = null;
            var _loc_17:Number = NaN;
            var _loc_18:String = null;
            var _loc_19:Number = NaN;
            var _loc_20:Number = NaN;
            var _loc_21:Number = NaN;
            var _loc_22:Number = NaN;
            var _loc_23:Number = NaN;
            var _loc_24:Number = NaN;
            var _loc_25:Boolean = false;
            var _loc_26:DateFormatter = null;
            var _loc_27:String = null;
            var _loc_28:UITextFormat = null;
            var _loc_29:Number = NaN;
            var _loc_30:Number = NaN;
            var _loc_31:Number = NaN;
            var _loc_32:Object = null;
            var _loc_33:Number = NaN;
            var _loc_34:Number = NaN;
            var _loc_35:Number = NaN;
            var _loc_36:Number = NaN;
            var _loc_37:Number = NaN;
            var _loc_38:SerialDataItem = null;
            var _loc_39:Number = NaN;
            var _loc_40:Number = NaN;
            var _loc_41:Boolean = false;
            var _loc_42:Number = NaN;
            var _loc_43:SerialDataItem = null;
            var _loc_44:Number = NaN;
            var _loc_45:Guide = null;
            var _loc_46:Number = NaN;
            var _loc_47:Number = NaN;
            var _loc_48:Number = NaN;
            var _loc_49:Object = null;
            var _loc_50:ExtendedSprite = null;
            var _loc_51:Number = NaN;
            var _loc_52:Number = NaN;
            var _loc_53:Number = NaN;
            var _loc_54:Number = NaN;
            var _loc_55:AxisEvent = null;
            _maxLabelWidth = 0;
            super.updateDisplayList(param1, param2);
            generateDFArray();
            if (_dataProvider.length > 0)
            {
                _loc_4 = getStyle("labelFrequency");
                _loc_5 = 0;
                _loc_6 = _end - _start + 1;
                _loc_7 = _gridCount;
                _loc_8 = getStyle("showFirstLabel");
                _loc_9 = getStyle("showLastLabel");
                _loc_11 = "";
                _loc_12 = Dates.extractPeriod(_minPeriod);
                _loc_13 = Dates.getPeriodDuration(_loc_12.period, _loc_12.count);
                _loc_26 = new DateFormatter();
                _loc_30 = SerialDataItem(_dataProvider.getItemAt((_dataProvider.length - 1))).time;
                _loc_31 = Dates.resetDateToMin(new Date(_loc_30 + _loc_13 * 1.1), minPeriod, 1, _firstDayOfWeek).getTime();
                if (_endTime > _loc_31)
                {
                    _endTime = _loc_31;
                }
                if (_parseDates)
                {
                }
                if (!_equalSpacing)
                {
                    _timeDifference = _endTime - _startTime;
                    _loc_14 = choosePeriod(0);
                    _loc_16 = _loc_14.period;
                    _loc_15 = _loc_14.count;
                    _loc_17 = Dates.getPeriodDuration(_loc_16, _loc_15);
                    if (_loc_17 < _loc_13)
                    {
                        _loc_16 = _loc_12.period;
                        _loc_15 = _loc_12.count;
                        _loc_17 = _loc_13;
                    }
                    _loc_18 = _loc_16;
                    if (_loc_18 == "WW")
                    {
                        _loc_18 = "DD";
                    }
                    _stepWidth = getStepWidth(_timeDifference);
                    _loc_7 = Math.ceil(_timeDifference / _loc_17) + 1;
                    _loc_19 = Dates.resetDateToMin(new Date(_startTime - _loc_17), _loc_16, _loc_15, _firstDayOfWeek).getTime();
                    if (_loc_18 == _loc_16)
                    {
                    }
                    if (_loc_15 == 1)
                    {
                        _loc_20 = _loc_17 * _stepWidth;
                    }
                    _cellWidth = _loc_13 * _stepWidth;
                    _loc_21 = int(_loc_19 / _loc_17);
                    _loc_22 = -1;
                    if (_loc_21 / 2 == int(_loc_21 / 2))
                    {
                        _loc_22 = -2;
                        _loc_19 = _loc_19 - _loc_17;
                    }
                    _loc_23 = _loc_22;
                    while (_loc_23 <= _loc_7)
                    {
                        
                        _loc_24 = _loc_19 + _loc_17 * 1.5;
                        _loc_24 = Dates.resetDateToMin(new Date(_loc_24), _loc_16, _loc_15, _firstDayOfWeek).getTime();
                        _loc_10 = (_loc_24 - _startTime) * _stepWidth;
                        _loc_25 = false;
                        if (_nextPeriod[_loc_18])
                        {
                            _loc_25 = checkPeriodChange(_nextPeriod[_loc_18], 1, _loc_24, _loc_19);
                        }
                        _loc_28 = determineTextFormatFromStyles();
                        if (_loc_25)
                        {
                            _loc_27 = _dateFormats[_nextPeriod[_loc_18]];
                            _loc_28.bold = true;
                        }
                        else
                        {
                            _loc_27 = _dateFormats[_loc_18];
                            _loc_28.bold = false;
                        }
                        _loc_26.formatString = _loc_27;
                        _loc_11 = _loc_26.format(new Date(_loc_24));
                        if (_loc_23 == _loc_22)
                        {
                        }
                        if (_loc_8)
                        {
                            if (_loc_23 == _loc_7)
                            {
                            }
                        }
                        if (!_loc_9)
                        {
                            _loc_11 = " ";
                        }
                        _loc_32 = new _axisItemRenderer(this, _loc_10, _loc_11, false, _loc_20);
                        _loc_33 = _loc_32.width + 10 + _offset;
                        if (_loc_33 > _maxLabelWidth)
                        {
                            _maxLabelWidth = _loc_33;
                        }
                        _loc_19 = _loc_24;
                        _loc_23 = _loc_23 + 1;
                    }
                }
                else if (!_parseDates)
                {
                    if (_startOnAxis)
                    {
                        _cellWidth = _axisWidth / (_loc_6 - 1);
                    }
                    else
                    {
                        _cellWidth = _axisWidth / _loc_6;
                    }
                    if (_loc_6 < _loc_7)
                    {
                        _loc_7 = _loc_6;
                    }
                    _loc_5 = _loc_5 + _start;
                    _stepWidth = getStepWidth(_loc_6);
                    if (_loc_7 > 0)
                    {
                        _loc_34 = Math.floor(_loc_6 / _loc_7);
                        _loc_29 = _loc_5;
                        if (_loc_29 / 2 == int(_loc_29 / 2))
                        {
                            _loc_29 = _loc_29 - 1;
                        }
                        if (_loc_29 < 0)
                        {
                            _loc_29 = 0;
                        }
                        _loc_23 = _loc_29;
                        while (_loc_23 <= _end + 2)
                        {
                            
                            _loc_11 = undefined;
                            if (_loc_23 >= 0)
                            {
                            }
                            if (_loc_23 < _dataProvider.length)
                            {
                                _loc_38 = _dataProvider.getItemAt(_loc_23) as SerialDataItem;
                                _loc_11 = String(_loc_38.category);
                            }
                            _loc_10 = getCoordinate(_loc_23 - _loc_5);
                            _loc_35 = 0;
                            if (_gridPosition == "start")
                            {
                                _loc_10 = _loc_10 - _cellWidth / 2;
                                _loc_35 = cellWidth / 2;
                            }
                            if (_loc_23 == _loc_22)
                            {
                            }
                            if (_loc_8)
                            {
                                if (_loc_23 == _end)
                                {
                                }
                            }
                            if (!_loc_9)
                            {
                                _loc_11 = " ";
                            }
                            if (int(_loc_23 / _loc_4) != _loc_23 / _loc_4)
                            {
                                _loc_11 = undefined;
                            }
                            _loc_36 = _cellWidth;
                            if (_rotate)
                            {
                                _loc_36 = NaN;
                            }
                            if (_wrapLabels)
                            {
                                if (_orientation == "horizontal")
                                {
                                    _loc_37 = _cellWidth;
                                }
                                else
                                {
                                    if (_ignoreAxisWidth)
                                    {
                                        if (_position == "left")
                                        {
                                            _loc_37 = _chart.getStyle("marginLeft");
                                        }
                                        else
                                        {
                                            _loc_37 = _chart.getStyle("marginRight");
                                        }
                                        _loc_37 = _loc_37 - (this.getStyle("tickLength") + 10);
                                    }
                                    if (_axisTitle)
                                    {
                                        _loc_37 = _loc_37 - (_titleTextSize + 10);
                                    }
                                }
                            }
                            _loc_32 = new _axisItemRenderer(this, _loc_10, _loc_11, true, _loc_36, _loc_35, undefined, _loc_35, _loc_37);
                            _loc_33 = _loc_32.width + 10 + _offset;
                            if (_loc_33 > _maxLabelWidth)
                            {
                                _maxLabelWidth = _loc_33;
                            }
                            _loc_23 = _loc_23 + _loc_34;
                        }
                    }
                }
                else
                {
                    if (_parseDates)
                    {
                    }
                    if (_equalSpacing)
                    {
                        _loc_5 = _start;
                        _startTime = _dataProvider.getItemAt(_start).time;
                        _endTime = _dataProvider.getItemAt(_end).time;
                        _timeDifference = _endTime - _startTime;
                        _loc_14 = choosePeriod(0);
                        _loc_16 = _loc_14.period;
                        _loc_15 = _loc_14.count;
                        _loc_17 = Dates.getPeriodDuration(_loc_16, _loc_15);
                        if (_loc_17 < _loc_13)
                        {
                            _loc_16 = _loc_12.period;
                            _loc_15 = _loc_12.count;
                            _loc_17 = _loc_13;
                        }
                        _loc_18 = _loc_16;
                        if (_loc_18 == "WW")
                        {
                            _loc_18 = "DD";
                        }
                        _stepWidth = getStepWidth(_loc_6);
                        _loc_7 = Math.ceil(_timeDifference / _loc_17) + 1;
                        _loc_19 = Dates.resetDateToMin(new Date(_startTime - _loc_17), _loc_16, _loc_15, _firstDayOfWeek).getTime();
                        if (_startOnAxis)
                        {
                            _cellWidth = _axisWidth / (_loc_6 - 1);
                        }
                        else
                        {
                            _cellWidth = _axisWidth / _loc_6;
                        }
                        _loc_21 = int(_loc_19 / _loc_17);
                        _loc_22 = -1;
                        if (_loc_21 / 2 == int(_loc_21 / 2))
                        {
                            _loc_22 = -2;
                            _loc_19 = _loc_19 - _loc_17;
                        }
                        _loc_39 = _dataProvider.length;
                        _loc_29 = _start;
                        if (_loc_29 / 2 == int(_loc_29 / 2))
                        {
                            _loc_29 = _loc_29 - 1;
                        }
                        if (_loc_29 < 0)
                        {
                            _loc_29 = 0;
                        }
                        _loc_40 = _end + 2;
                        if (_loc_40 >= _dataProvider.length)
                        {
                            _loc_40 = _dataProvider.length;
                        }
                        _loc_41 = false;
                        if (_end - _start > _gridCount)
                        {
                            _loc_41 = true;
                        }
                        _loc_23 = _loc_29;
                        while (_loc_23 < _loc_40)
                        {
                            
                            _loc_24 = _dataProvider.getItemAt(_loc_23).time;
                            if (checkPeriodChange(_loc_16, _loc_15, _loc_24, _loc_19))
                            {
                                _loc_10 = getCoordinate(_loc_23 - _start);
                                _loc_25 = false;
                                if (_nextPeriod[_loc_18])
                                {
                                    _loc_25 = checkPeriodChange(_nextPeriod[_loc_18], 1, _loc_24, _loc_19);
                                }
                                _loc_28 = determineTextFormatFromStyles();
                                if (_loc_25)
                                {
                                    _loc_27 = _dateFormats[_nextPeriod[_loc_18]];
                                    _loc_28.bold = true;
                                }
                                else
                                {
                                    _loc_27 = _dateFormats[_loc_18];
                                    _loc_28.bold = false;
                                }
                                _loc_26.formatString = _loc_27;
                                _loc_11 = _loc_26.format(new Date(_loc_24));
                                if (_loc_23 == _loc_22)
                                {
                                }
                                if (_loc_8)
                                {
                                    if (_loc_23 == _loc_7)
                                    {
                                    }
                                }
                                if (!_loc_9)
                                {
                                    _loc_11 = " ";
                                }
                                if (!_loc_41)
                                {
                                    _loc_32 = new _axisItemRenderer(this, _loc_10, _loc_11);
                                    _loc_33 = _loc_32.width + 10 + _offset;
                                    if (_loc_33 > _maxLabelWidth)
                                    {
                                        _maxLabelWidth = _loc_33;
                                    }
                                    if (!_rotate)
                                    {
                                        if (_loc_10 - _loc_32.textWidth / 2 < _loc_42)
                                        {
                                            _loc_32.hide();
                                        }
                                        else
                                        {
                                            _loc_42 = _loc_10 + _loc_32.textWidth / 2;
                                        }
                                    }
                                }
                                else
                                {
                                    _loc_41 = false;
                                }
                                _loc_19 = _loc_24;
                            }
                            _loc_23 = _loc_23 + 1;
                        }
                    }
                }
                _loc_23 = 0;
                while (_loc_23 < _dataProvider.length)
                {
                    
                    _loc_43 = _dataProvider.getItemAt(_loc_23) as SerialDataItem;
                    if (_loc_43)
                    {
                        if (_parseDates)
                        {
                        }
                        if (!_equalSpacing)
                        {
                            _loc_44 = _loc_43.time;
                            _loc_43.x[this.id] = (_loc_44 - _startTime) * _stepWidth + _cellWidth / 2;
                        }
                        else
                        {
                            _loc_43.x[this.id] = getCoordinate(_loc_23 - _loc_5);
                        }
                    }
                    _loc_23 = _loc_23 + 1;
                }
            }
            var _loc_3:* = _guides.length;
            _loc_23 = 0;
            while (_loc_23 < _loc_3)
            {
                
                _loc_45 = _guides[_loc_23];
                _loc_46 = NaN;
                _loc_47 = NaN;
                _loc_48 = NaN;
                if (_loc_45.toCategory)
                {
                    _loc_51 = _chart.getCategoryIndexByValue(_loc_45.toCategory);
                    if (!isNaN(_loc_51))
                    {
                        _loc_46 = getCoordinate(_loc_51 - _loc_5);
                        new _axisItemRenderer(this, _loc_46, "", true, NaN, NaN, _loc_45);
                    }
                }
                if (_loc_45.category)
                {
                    _loc_52 = _chart.getCategoryIndexByValue(_loc_45.category);
                    if (!isNaN(_loc_52))
                    {
                        _loc_47 = getCoordinate(_loc_52 - _loc_5);
                        _loc_48 = (_loc_46 - _loc_47) / 2;
                        new _axisItemRenderer(this, _loc_47, _loc_45.label, true, NaN, _loc_48, _loc_45);
                    }
                }
                if (_loc_45.toDate)
                {
                    if (_equalSpacing)
                    {
                        _loc_53 = Utils.getClosestIndex(_dataProvider, "time", _loc_45.toDate.getTime(), false, 0, (_dataProvider.length - 1));
                        if (!isNaN(_loc_53))
                        {
                            _loc_46 = this.getCoordinate(_loc_53 - _loc_5);
                        }
                    }
                    else
                    {
                        _loc_46 = (_loc_45.toDate.getTime() - _startTime) * _stepWidth;
                    }
                    new _axisItemRenderer(this, _loc_46, "", true, NaN, NaN, _loc_45);
                }
                if (_loc_45.date)
                {
                    if (_equalSpacing)
                    {
                        _loc_54 = Utils.getClosestIndex(_dataProvider, "time", _loc_45.date.getTime(), false, 0, (_dataProvider.length - 1));
                        if (!isNaN(_loc_54))
                        {
                            _loc_47 = this.getCoordinate(_loc_54 - _loc_5);
                        }
                    }
                    else
                    {
                        _loc_47 = (_loc_45.date.getTime() - _startTime) * _stepWidth;
                    }
                    _loc_48 = (_loc_46 - _loc_47) / 2;
                    if (_orientation == "horizontal")
                    {
                        new _axisItemRenderer(this, _loc_47, _loc_45.label, false, _loc_48 * 2, NaN, _loc_45);
                    }
                    else
                    {
                        new _axisItemRenderer(this, _loc_47, _loc_45.label, true, _loc_48 * 2, NaN, _loc_45);
                    }
                }
                _loc_49 = new _guideFillRenderer(this, _loc_46 - _loc_47, _loc_47, _loc_45);
                _loc_50 = _loc_49.fill;
                _loc_50.index = _loc_23;
                if (_loc_45.balloonText)
                {
                    _loc_50.addEventListener(MouseEvent.ROLL_OVER, handleGuideOver);
                    _loc_50.addEventListener(MouseEvent.ROLL_OUT, handleGuideOut);
                }
                _loc_23 = _loc_23 + 1;
            }
            _axisCreated = true;
            if (_axisTitle)
            {
                adjustTitlePosition();
                _maxLabelWidth = _maxLabelWidth + (_axisTitle.textHeight + 10);
            }
            if (!_ignoreAxisWidth)
            {
                _loc_55 = new AxisEvent(AxisEvent.AXIS_WIDTH_CHANGED);
                _loc_55.axis = this;
                _loc_55.width = _maxLabelWidth;
                dispatchEvent(_loc_55);
            }
            return;
        }// end function

        protected function checkPeriodChange(param1:String, param2:Number, param3:Number, param4:Number) : Boolean
        {
            var _loc_5:* = new Date(param3);
            var _loc_6:* = new Date(param4);
            var _loc_7:* = Dates.resetDateToMin(_loc_5, param1, param2, _firstDayOfWeek).getTime();
            var _loc_8:* = Dates.resetDateToMin(_loc_6, param1, param2, _firstDayOfWeek).getTime();
            if (_loc_7 != _loc_8)
            {
                return true;
            }
            return false;
        }// end function

        protected function handleGuideOut(event:MouseEvent) : void
        {
            _chart.balloon.hide();
            return;
        }// end function

        public function xToIndex(param1:Number) : Number
        {
            var _loc_2:Number = NaN;
            var _loc_4:Number = NaN;
            if (_parseDates)
            {
            }
            if (!_equalSpacing)
            {
                _loc_4 = _startTime + Math.round(param1 / _stepWidth) - minDuration / 2;
                _loc_2 = Utils.getClosestIndex(_dataProvider, "time", _loc_4, false, _start, (_end + 1));
            }
            else
            {
                if (!_startOnAxis)
                {
                    param1 = param1 - _stepWidth / 2;
                }
                _loc_2 = _start + Math.round(param1 / _stepWidth);
            }
            _loc_2 = Utils.fitToBounds(_loc_2, 0, (_dataProvider.length - 1));
            var _loc_3:* = _dataProvider.getItemAt(_loc_2).x[this.id];
            if (_rotate)
            {
                if (_loc_3 > (this.height + 1))
                {
                    _loc_2 = _loc_2 - 1;
                }
            }
            else if (_loc_3 > (this.width + 1))
            {
                _loc_2 = _loc_2 - 1;
            }
            if (_loc_3 < 0)
            {
                _loc_2 = _loc_2 + 1;
            }
            _loc_2 = Utils.fitToBounds(_loc_2, 0, (_dataProvider.length - 1));
            return _loc_2;
        }// end function

    }
}
